import router from "@/router/index.ts";
import { RouteLocationNormalized, NavigationGuardNext } from "vue-router";
import { showNprogress, hiddenNprogress } from "@/utils/index.ts";
import { koiMsgWarning } from "@/utils/koi.ts";
// import { koiSessionStorage } from "@/utils/storage";
import useUserStore from "@/store/user/index.ts";
import useRouteStore from "@/store/layout/routes.ts";

// 全局守卫：项目当中任意路由切换都会触发的钩子
// 全局前置守卫
let routeLock = false;
// @ts-nocheck
router.beforeEach(
  // 使用这种数据从后端全部取出，回出现多标签页，刷新浏览器少一个动态路由的tab
  async (
    to: RouteLocationNormalized,
    from: RouteLocationNormalized,
    next: NavigationGuardNext,
  ) => {
    // to：你将要访问哪个路由，from: 你从哪个路由来，next: 路由放行
    console.log("前置守卫-去哪里-", to.path, "-从哪里来-", from.path);
    const userStore = useUserStore();
    const routeStore = useRouteStore();
    // const isLogin = koiSessionStorage.get("user");
    // 开启全屏动画
    showNprogress();
    // console.log("isLogin",userStore.getToken)
    // console.log("查看所有路由",router.getRoutes())
    // console.log("匹配路由",to.matched);
    // next() 必须保证它被调用一次
    if (userStore.getToken) {
      // 用户token存在
      // 登录成功，访问login，拒绝访问，指向首页
      if (to.path == "/login") {
        next({ path: "/home" });
      } else {
        // console.log("是否含有此路由",router.hasRoute("/role"))
        if (routeLock) {
          // console.log("11111111")
          next();
        } else {
          // 注册动态路由, 动态路由必须要用async 和 await 或者使用
          // console.log("222222222222")
          try {
            await routeStore.generateMenuRoutes(2);
            routeLock = true; // 只有第一次刷新浏览器需要访问菜单接口数据，重新配置菜单数据需要重新登陆
            return next({ path: to.fullPath, replace: true }); // ...to 保证路由添加完了再进入页面 (可以理解为重进一次) replace: true 重进一次, 不保留重复历史
          } catch (error) {
            next(`/login?redirect=${to.path}`);
          }
        }
      }
    } else {
      // 用户未登录
      if (to.path == "/login") {
        next();
      } else {
        koiMsgWarning("账号身份已过期，请重新登录🌻");
        next({ path: "/login", query: { redirect: to.path } });
      }
    }
  },
);

// 全局后置守卫
router.afterEach(
  (to: RouteLocationNormalized, from: RouteLocationNormalized) => {
    console.log("后置守卫-去哪里-", to.path, "-从哪里来-", from.path);
    // 结束全屏动画
    hiddenNprogress();
    // 标题切换
    document.title = to.meta.title + "🌻" || "YU-ADMIN🌻";
  },
);

/**
 * 路由跳转错误
 */
router.onError((error) => {
  // 结束全屏动画
  hiddenNprogress();
  console.warn("路由错误", error.message);
});
